VkRect2D scissor;
VkCommandPool command_pool;
+ VkFence fence;
+
VkCommandBuffer command_buffer;
GSList *render_passes;
GskVulkanRender *
gsk_vulkan_render_new (GskRenderer *renderer,
- GdkVulkanContext *context,
- VkCommandPool command_pool)
+ GdkVulkanContext *context)
{
GskVulkanRender *self;
+ VkDevice device;
self = g_slice_new0 (GskVulkanRender);
self->vulkan = context;
self->renderer = renderer;
- self->command_pool = command_pool;
gsk_vulkan_render_compute_mvp (self);
- GSK_VK_CHECK (vkAllocateCommandBuffers, gdk_vulkan_context_get_device (self->vulkan),
+ device = gdk_vulkan_context_get_device (self->vulkan);
+
+ GSK_VK_CHECK (vkCreateCommandPool, device,
+ &(const VkCommandPoolCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
+ .queueFamilyIndex = gdk_vulkan_context_get_queue_family_index (self->vulkan),
+ .flags = 0
+ },
+ NULL,
+ &self->command_pool);
+
+ GSK_VK_CHECK (vkCreateFence, device,
+ &(VkFenceCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+ .flags = 0
+ },
+ NULL,
+ &self->fence);
+
+ GSK_VK_CHECK (vkAllocateCommandBuffers, device,
&(VkCommandBufferAllocateInfo) {
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
.commandPool = self->command_pool,
}
void
-gsk_vulkan_render_submit (GskVulkanRender *self,
- VkFence fence)
+gsk_vulkan_render_submit (GskVulkanRender *self)
{
GSK_VK_CHECK (vkEndCommandBuffer, self->command_buffer);
gdk_vulkan_context_get_draw_semaphore (self->vulkan)
}
},
- fence);
+ self->fence);
GSK_VK_CHECK (vkWaitForFences, gdk_vulkan_context_get_device (self->vulkan),
1,
- &fence,
+ &self->fence,
VK_TRUE,
INT64_MAX);
GSK_VK_CHECK (vkResetFences, gdk_vulkan_context_get_device (self->vulkan),
1,
- &fence);
+ &self->fence);
}
void
gsk_vulkan_render_free (GskVulkanRender *self)
{
- GSK_VK_CHECK (vkResetCommandPool, gdk_vulkan_context_get_device (self->vulkan),
+ VkDevice device = gdk_vulkan_context_get_device (self->vulkan);
+
+ GSK_VK_CHECK (vkResetCommandPool, device,
self->command_pool,
0);
g_slist_free_full (self->render_passes, (GDestroyNotify) gsk_vulkan_render_pass_free);
g_slist_free_full (self->cleanup_images, (GDestroyNotify) gsk_vulkan_image_free);
+ vkDestroyFence (device,
+ self->fence,
+ NULL);
+ vkDestroyCommandPool (device,
+ self->command_pool,
+ NULL);
+
g_slice_free (GskVulkanRender, self);
}
GskVulkanTarget **targets;
VkRenderPass render_pass;
- VkCommandPool command_pool;
- VkFence command_pool_fence;
VkDescriptorPool descriptor_pool;
VkDescriptorSet descriptor_set;
},
NULL,
&self->render_pass);
- GSK_VK_CHECK (vkCreateCommandPool, device,
- &(const VkCommandPoolCreateInfo) {
- .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
- .queueFamilyIndex = gdk_vulkan_context_get_queue_family_index (self->vulkan),
- .flags = 0
- },
- NULL,
- &self->command_pool);
-
- GSK_VK_CHECK (vkCreateFence, device,
- &(VkFenceCreateInfo) {
- .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
- .flags = 0
- },
- NULL,
- &self->command_pool_fence);
self->pipeline = gsk_vulkan_pipeline_new (self->vulkan, self->render_pass);
g_clear_object (&self->pipeline);
- vkDestroyFence (device,
- self->command_pool_fence,
- NULL);
- self->command_pool_fence = VK_NULL_HANDLE;
-
- vkDestroyCommandPool (device,
- self->command_pool,
- NULL);
- self->command_pool = VK_NULL_HANDLE;
-
vkDestroyRenderPass (device,
self->render_pass,
NULL);
gsk_profiler_timer_begin (profiler, self->profile_timers.cpu_time);
#endif
- render = gsk_vulkan_render_new (renderer, self->vulkan, self->command_pool);
+ render = gsk_vulkan_render_new (renderer, self->vulkan);
gsk_vulkan_render_add_node (render, root);
self->targets[gdk_vulkan_context_get_draw_index (self->vulkan)]->framebuffer,
self->descriptor_set, self->sampler);
- gsk_vulkan_render_submit (render, self->command_pool_fence);
+ gsk_vulkan_render_submit (render);
gsk_vulkan_render_free (render);
};
GskVulkanRender * gsk_vulkan_render_new (GskRenderer *renderer,
- GdkVulkanContext *context,
- VkCommandPool command_pool);
+ GdkVulkanContext *context);
void gsk_vulkan_render_free (GskVulkanRender *self);
GskRenderer * gsk_vulkan_render_get_renderer (GskVulkanRender *self);
VkDescriptorSet descriptor_set,
VkSampler sampler);
-void gsk_vulkan_render_submit (GskVulkanRender *self,
- VkFence fence);
+void gsk_vulkan_render_submit (GskVulkanRender *self);
G_END_DECLS